using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IntelligenceTools._Analysis._Suitability
{
    /// <summary>
    /// <para>Generate Obstacle Features</para>
    /// <para>Converts features with a height field to a 3D obstacle feature and an obstacle restriction buffer for use in evaluating helicopter landing zones.</para>
    /// <para>将具有高度字段的要素转换为 3D 障碍物要素和障碍物限制缓冲区，以用于评估直升机着陆区。</para>
    /// </summary>    
    [DisplayName("Generate Obstacle Features")]
    public class GenerateObstacleFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateObstacleFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input source features used to create obstacle features.</para>
        /// <para>用于创建障碍物要素的输入源要素。</para>
        /// </param>
        /// <param name="_height_field">
        /// <para>Height Field</para>
        /// <para>A field from the Input Features parameter containing height values. The field type can be numeric or text. If a text field is used, the field values must be numeric.</para>
        /// <para>输入要素参数中包含高度值的字段。字段类型可以是数字或文本。如果使用文本字段，则字段值必须为数字。</para>
        /// </param>
        /// <param name="_out_obstacle_features">
        /// <para>Output Obstacle Features</para>
        /// <para>The output 3D obstacle features.</para>
        /// <para>输出的 3D 障碍物特征。</para>
        /// </param>
        /// <param name="_out_obstacle_buffers">
        /// <para>Output Obstacle Buffers</para>
        /// <para>The output obstacle buffer features</para>
        /// <para>输出障碍缓冲器功能</para>
        /// </param>
        public GenerateObstacleFeatures(object _in_features, object _height_field, object _out_obstacle_features, object _out_obstacle_buffers)
        {
            this._in_features = _in_features;
            this._height_field = _height_field;
            this._out_obstacle_features = _out_obstacle_features;
            this._out_obstacle_buffers = _out_obstacle_buffers;
        }
        public override string ToolboxName => "Intelligence Tools";

        public override string ToolName => "Generate Obstacle Features";

        public override string CallName => "intelligence.GenerateObstacleFeatures";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_features, _height_field, _out_obstacle_features, _out_obstacle_buffers, _clip_features];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input source features used to create obstacle features.</para>
        /// <para>用于创建障碍物要素的输入源要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Height Field</para>
        /// <para>A field from the Input Features parameter containing height values. The field type can be numeric or text. If a text field is used, the field values must be numeric.</para>
        /// <para>输入要素参数中包含高度值的字段。字段类型可以是数字或文本。如果使用文本字段，则字段值必须为数字。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Height Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _height_field { get; set; }


        /// <summary>
        /// <para>Output Obstacle Features</para>
        /// <para>The output 3D obstacle features.</para>
        /// <para>输出的 3D 障碍物特征。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Obstacle Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_obstacle_features { get; set; }


        /// <summary>
        /// <para>Output Obstacle Buffers</para>
        /// <para>The output obstacle buffer features</para>
        /// <para>输出障碍缓冲器功能</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Obstacle Buffers")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_obstacle_buffers { get; set; }


        /// <summary>
        /// <para>Clip Features</para>
        /// <para>An area to clip the Output Obstacle Features. Only features within the Clip Features will be processed.</para>
        /// <para>用于裁剪输出障碍物特征的区域。仅处理“裁剪特征”中的要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clip Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _clip_features { get; set; } = null;


        public GenerateObstacleFeatures SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}